home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / e / amigae21b.lha / Amiga_E_v2.1b / Sources / Utilities / ShowModule.e < prev    next >
Text File  |  1992-09-02  |  3KB  |  106 lines

  1. /* ShowModule.e; dumps all the infos in a '.m' binary file */
  2.  
  3. ENUM JOB_DONE,JOB_CONST,JOB_OBJ,JOB_LIB=6
  4. ENUM ER_NONE,ER_FILE,ER_MEM,ER_USAGE,ER_JOBID,ER_BREAK,ER_FILETYPE
  5.  
  6. DEF flen,o:PTR TO INT,mem,handle=NIL
  7.  
  8. PROC main() HANDLE
  9.   WriteF('ShowModule v0.1 (c) 1992 $#%!\n')
  10.   WriteF('now showing: "\s"\n',arg)
  11.   WriteF('NOTE: don\at use this output in your code, use the module instead.\n\n')
  12.   IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2)
  13.     Raise(ER_USAGE)
  14.   ELSE
  15.     flen:=FileLength(arg)
  16.     handle:=Open(arg,OLDFILE)
  17.     IF (flen<8) OR (handle=NIL)
  18.       Raise(ER_FILE)
  19.     ELSE
  20.       mem:=New(flen)
  21.       IF mem=NIL
  22.         Raise(ER_MEM)
  23.       ELSE
  24.         IF Read(handle,mem,flen)<>flen THEN Raise(ER_FILE)
  25.         Close(handle)
  26.         handle:=NIL
  27.         process()
  28.       ENDIF
  29.     ENDIF
  30.   ENDIF
  31. EXCEPT
  32.   IF handle THEN Close(handle)
  33.   WriteF('\n')
  34.   SELECT exception
  35.     CASE ER_FILE;     WriteF('Could not read file "\s" !\n',arg)
  36.     CASE ER_MEM;      WriteF('No memory for loading module!\n')
  37.     CASE ER_USAGE;    WriteF('USAGE: ShowModule <module>\n')
  38.     CASE ER_JOBID;    WriteF('Illegal job id!\n')
  39.     CASE ER_BREAK;    WriteF('User interupted ShowModule\n')
  40.     CASE ER_FILETYPE; WriteF('Not an E module file.\n')
  41.   ENDSELECT
  42. ENDPROC
  43.  
  44. PROC process()
  45.   DEF end,job,len,val,f,off,types:PTR TO LONG,c,r,c2
  46.   o:=mem
  47.   end:=o+flen
  48.   types:=['substructure','CHAR','INT','','LONG']
  49.   IF ^o++<>"EMOD" THEN Raise(ER_FILETYPE)
  50.   WHILE o<end
  51.     IF CtrlC() THEN Raise(ER_BREAK)
  52.     job:=o[]++
  53.     SELECT job
  54.       CASE JOB_CONST
  55.         len:=o[]++; f:=TRUE
  56.         WHILE len
  57.           val:=^o++
  58.           IF f THEN WriteF('CONST ') ELSE WriteF('      ')
  59.           WriteF('\s=',o)
  60.           IF (val>=-$20) AND (val<$20) THEN WriteF('\d',val) ELSE WriteF('$\h',val)
  61.           o:=o+len; len:=o[]++; f:=FALSE
  62.           IF len THEN WriteF(',\n') ELSE WriteF('\n\n')
  63.           IF CtrlC() THEN Raise(ER_BREAK)
  64.         ENDWHILE
  65.       CASE JOB_OBJ
  66.         len:=o[]++;
  67.         WriteF('(---) OBJECT \s\n',o+4)
  68.         o:=o+4+len
  69.         WHILE len:=o[]++
  70.           val:=o[]++
  71.           off:=o[]++
  72.           WriteF('(\d[3])   \s:\s\n',off,o,types[val])
  73.           o:=o+len
  74.           IF CtrlC() THEN Raise(ER_BREAK)
  75.         ENDWHILE
  76.         val:=o[]++
  77.         WriteF('(---) ENDOBJECT     /* SIZEOF=')
  78.         WriteF(IF val<>$FFFF THEN '\d */\n\n' ELSE 'NONE !!! */\n\n',val)
  79.       CASE JOB_LIB
  80.         c:=o
  81.         WHILE c[]++ DO NOP
  82.         WriteF('LIBRARY \a\s\a, \s         /* informal notation */\n',o,c)
  83.         WHILE c[]++ DO NOP
  84.         WHILE (c[]<>$FF) AND (c<end)
  85.           c2:=c
  86.           WHILE c[]++>" " DO NOP; c--
  87.           r:=c[]; c[]++:=0
  88.           WriteF('  \s\c',c2,"(")
  89.           WHILE r<" "
  90.             IF r<16 THEN IF r<8 THEN WriteF('D\d',r) ELSE WriteF('A\d',r-8)
  91.             r:=c[]++
  92.             IF r<16 THEN WriteF(',')
  93.           ENDWHILE
  94.           c--
  95.           WriteF(')\n')
  96.         ENDWHILE
  97.         WriteF('ENDLIBRARY\n\n')
  98.         o:=end
  99.       CASE JOB_DONE
  100.         o:=end
  101.       DEFAULT
  102.         Raise(ER_JOBID)
  103.     ENDSELECT
  104.   ENDWHILE
  105. ENDPROC
  106.